package com.dhq.dao;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.SolrParams;
import org.junit.Test;

import com.dhq.bean.Product;


/**
 * 使用solrJ 向solr 提交请求，增删改查，
 * solrJ 底层页是发送http 协议...
 * @author Administrator
 *
 */
public class SolrJDao {
	
	public void addIndex(Product product) throws SolrServerException, IOException
	{
		//第一步，我需要跟solr 服务器建立起一个连接..
		String urlString = "http://localhost:8983/solr";
		SolrServer solr = new HttpSolrServer(urlString);
		
//		//在solr 当中有一些默认的字段，这个字段在配置文件里面...
//		SolrInputDocument doc=new SolrInputDocument();
//		
//		doc.addField("id", product.getId());
//		
//		doc.addField("name", product.getName());
////		schema.xml 用来定义索引的结构，用来定义document 结构... 
//		doc.addField("description", product.getDesc());
//		doc.addField("price", product.getPrice());
//		solr.add(doc);
		solr.addBean(product);
		solr.commit();
	}
	
	@Test
	public void adddynamicField() throws SolrServerException, IOException
	{
		//第一步，我需要跟solr 服务器建立起一个连接..
		String urlString = "http://localhost:8983/solr";
		SolrServer solr = new HttpSolrServer(urlString);
		
		//在solr 当中有一些默认的字段，这个字段在配置文件里面...
		SolrInputDocument doc=new SolrInputDocument();
		doc.addField("id", "ccccccc");
		
		doc.addField("name", "8888888");
//		schema.xml 用来定义索引的结构，用来定义document 结构... 
		doc.addField("desc_i", "wwwww");
		doc.addField("price", 1f);
		solr.add(doc);
		solr.commit();
	}
	
	
	public void updateIndex() throws IOException, SolrServerException{
		//第一步，我需要跟solr 服务器建立起一个连接..
		String urlString = "http://localhost:8081/solr";
		SolrServer solr = new HttpSolrServer(urlString);
		Product product=new Product();
		product.setId(2);
		product.setName("毛衣的毛衣黑色毛衣");
		product.setDesc("横挑眉毛竖挑眼，完全没缺点..");
		product.setPrice(9f);
		solr.addBean(product);
		solr.commit();
		
	}


	public void delIndex(String id) throws SolrServerException, IOException{
		String urlString = "http://localhost:8081/solr";
		SolrServer solr = new HttpSolrServer(urlString);
		solr.deleteById(id);
		solr.commit();
	}
	
	
	public void findIndex() throws SolrServerException{
		String urlString = "http://localhost:8081/solr";
		SolrServer solr = new HttpSolrServer(urlString);
		//查询条件...
		SolrQuery solrParams=new SolrQuery();
		solrParams.setStart(0);
		solrParams.setRows(10);
		
		//name:苹果  根据description：苹果
		solrParams.setQuery("name:苹果");
//		solrParams.setQuery("description:苹果");
		//首先，我需要开启高亮...
		solrParams.setHighlight(true);
		solrParams.setHighlightSimplePre("<font color='red'>");
		solrParams.setHighlightSimplePost("</font>");
		
		//我需要那些字段进行高亮显示..
		solrParams.setParam("hl.fl", "name,description");
		
		//返回结果集，结果包含没有高亮的结果，高亮的结果..
		QueryResponse queryResponse=solr.query(solrParams);
		SolrDocumentList solrDocumentList=queryResponse.getResults();
		//返回高亮过后的结果...
		/**
		 * 假设我要迭代这样的一个map
		 * 我必须两个map 对应的这个key 代表的是撒..
		 * 
		 * 1:第一个map 代表的每条记录的id
		 * 2:第二个map 的可以 代表的我要高亮的字段..
		 * 
		 * 
		 */
		Map<String,Map<String, List<String>>>  listMap=queryResponse.getHighlighting();
		
		for(SolrDocument solrdocument:solrDocumentList){
			System.out.println("==="+solrdocument.toString());
			Map<String, List<String>> fieldsMap=listMap.get(solrdocument.get("id"));
			List<String> highname=fieldsMap.get("name");
			List<String> highdesc=fieldsMap.get("description");
			System.out.println("highname======"+highname);
			System.out.println("highdesc====="+highdesc);
		}
	}

}
